import { setToken, getToken, removeToken } from '@/utils/auth'
import { loginAPI, getUserProfileAPI } from '@/api/user'
// 导入静态路由表
import { constantRoutes, resetRouter } from '@/router'
const state = {
  // token
  token: getToken() || '',
  // 用户信息
  userInfo: {},
  // 路由表
  routes: constantRoutes
}
const mutations = {

  // 设置token
  setToken(state, token) {
    state.token = token // 在vuex中设置token
    setToken(token) // 在本地中存储token
  },

  // 清空token
  removeToken(state) {
    state.token = '' // 在vuex中删除token
    removeToken() // 在本地中删除token
  },
  // 设置用户信息
  setUserInfo(state, userInfo) {
    state.userInfo = userInfo
  },
  // 删除用户信息
  removeUserInfo(state) {
    state.userInfo = {}
  },
  // 设置路由表(默认值是静态路由)
  setRoutes(state, filterAsyncRoutes) {
    state.routes = [
      ...constantRoutes,
      ...filterAsyncRoutes
    ]
  },
  // 清空
  removeRoutes(state) {
    state.routes = []
  }
}
// action函数的2个常见作用:
// 1.编写异步代码
// 2.包装多个mutation函数
const actions = {
  // 登录action函数
  async loginAction(store, loginForm) {
    // 发送请求 获取token
    const token = await loginAPI(loginForm)
    console.log(token)
    // 触发mutations函数
    store.commit('setToken', token)
  },
  // 获取用户信息action函数
  async getUserInfoAction(store) {
    // 发送请求获取用户信息:todo
    const userInfo = await getUserProfileAPI()
    console.log(userInfo)
    // 触发mutations函数,设置state中的用户信息
    store.commit('setUserInfo', userInfo)
    // 返回用户信息
    return userInfo
  },
  // 退出action函数 (在action函数中包装多个mutation函数)
  logoutAction(store) {
    // 调用mutations中的函数  (退出时要清空token和用户信息)
    store.commit('removeToken')
    store.commit('removeUserInfo')

    // 重置路由表router
    resetRouter()
    // 重置vuex中的路由表
    store.commit('removeRoutes')
  }

}

export default {
  namespaced: true,
  state,
  mutations,
  actions
}
